package com.cskaoyan.javase.oop2._1extend._3protected._1two;

import com.cskaoyan.javase.oop2._1extend._3protected._0one.CurrentClazz;
import com.cskaoyan.javase.oop2._1extend._3protected._0one.SamePackageSonClazz;

/**
 * @description: 不同包下的子类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 不同包下的子类中去访问父类的protected成员,有以下方式:
 *      1,创建父类对象,使用父类对象名去访问  不行
 *      2,创建子类自身对象,使用子类自身对象名去访问 可以
 *      3,创建"兄弟姐妹"对象,使用对象名访问 不行
 *
 * 通过实验,我们发现实际上只有一种创建对象的方式能够访问父类的protected成员:
 *      在子类中创建子类自身对象,然后访问子类从父类中继承过来的protected成员
 *
 */
public class OtherPackageSonClazz extends CurrentClazz {
    public static void main(String[] args) {
        //1,创建父类对象,使用父类对象名去访问
        CurrentClazz cc = new CurrentClazz();
        //System.out.println(cc.a);

        //2,创建子类自身对象,使用子类对象名去访问
        OtherPackageSonClazz opc = new OtherPackageSonClazz();
        System.out.println(opc.a);

        //3,创建"兄弟姐妹"对象,使用对象名访问
        SamePackageSonClazz spsc = new SamePackageSonClazz();
        //System.out.println(spsc.a);

        //4,创建父类引用指向子类对象
        CurrentClazz cc2 = new OtherPackageSonClazz();
        //'a' has protected access in 'com.cskaoyan.javase.oop2._1extend._3protected._0one.CurrentClazz'
        //System.out.println(cc2.a);

    }
}
